package NO3_LinkedList;

/**
 * 2025-6-26
 * 力扣 - 206. 反转链表
 * <p>
 * 给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 */
public class ReverseListMain {
    public static void main(String[] args) {
        ListNode head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5)))));
        ListNode.printList(head);
        ListNode.printList(reverseList(head));
    }

    // 迭代
    public static ListNode reverseList(ListNode head) {
        ListNode pre = null; // 前一个节点
        ListNode cur = head; // 当前节点
        while (cur != null) {
            ListNode temp = cur.next; // 保存下一个节点
            cur.next = pre; // 改变下一个节点，指向当前
            pre = cur; // 改变前一个节点为当前节点
            cur = temp; // 移动到下一个节点
        }
        return pre;
    }

    // 递归
//    public static ListNode reverseList(ListNode head) {
//        if (head == null || head.next == null) {
//            return head;
//        }
//        ListNode newHead = reverseList(head.next);
//        head.next.next = head;
//        head.next = null;
//        return newHead;
//    }
}

